package com.ia2014.tp.portal2.servlet;

import java.io.IOException;
import java.util.List;

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.ia2014.tp.portal2.facades.FacadeVenta;
import com.ia2014.tp.portal2.vo.ArticuloVO;
import com.ia2014.tp.portal2.vo.ItemVentaVO;
import com.ia2014.tp.portal2.vo.UsuarioVO;

@WebServlet("/addToCarrito")
public class AddToCarritoServlet extends AbstractServlet{
	private static final long serialVersionUID = 6454865243645207085L;
	
	@EJB
	private FacadeVenta facade;
	
	
	public AddToCarritoServlet(){
		super();
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.comprobarSession(req, resp);
		this.process(req, resp);
	}

	
	private void process(HttpServletRequest req, HttpServletResponse resp) 
			throws ServletException, IOException{
		//Levanto la session y saco los parametros de configuracion
		HttpSession session  = req.getSession(false);
		Integer idArticulo 	 = Integer.parseInt(req.getParameter("idArticulo"));
		Integer cantidadItem = Integer.parseInt(req.getParameter("cantidadItem"));
		String redirect = "portal.jsp?idArticulo="+idArticulo+"?status=OK";
		UsuarioVO usuarioVO = (UsuarioVO) session.getAttribute("usuarioVO");
		
		List<ArticuloVO> listArticulos = this.getListFromSession(session);
		ArticuloVO articuloElegido = this.getArticuloFromList(listArticulos, idArticulo);
		
		if (articuloElegido != null){

			this.getMapItemsFromSession(session);
			ItemVentaVO itemVo = this.itemsVo.get(idArticulo);
			
			if (itemVo == null){
				itemVo = new ItemVentaVO();
				itemVo.setCantidad(cantidadItem.intValue());
				itemVo.setArticulo(articuloElegido);
				this.itemsVo.put(idArticulo, itemVo);
			}
			else{
				itemVo.setCantidad(itemVo.getCantidad() + cantidadItem.intValue());
				this.itemsVo.put(idArticulo, itemVo);
			}
			
			facade.setUsuarioVo(usuarioVO);
			facade.setItemsVo(itemsVo);
			facade.agregarItem(itemVo);
		}
		else{
			redirect = "portal.jsp?idArticulo="+idArticulo+"?status=ERROR";
		}
		
		resp.sendRedirect(redirect);
	}	

	/**
	 * Recorre los artículos cargados en memoria para obtener uno
	 * @param listArticulos
	 * @param articuloInput
	 * @return articuloVo
	 */
	private ArticuloVO getArticuloFromList(List<ArticuloVO> listArticulos, Integer idArticulo){
		for (ArticuloVO articulo : listArticulos){
			if ( articulo.getId().equals(idArticulo) ){
				return articulo;
			}
		}
		return null;
	}

}
